package Proyecto2.InterfazDeJuego;
/**
 * Juego Linguo
 * @author María Eugenia Heinrich,Yanina Elizabeth Rivera
 * 
 * 
 * */


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import javax.swing.SwingUtilities;

import Proyecto2.LogicaDeLJuego.*;

import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;

/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class GuiJuego extends javax.swing.JFrame implements Serializable, KeyListener  {

	private static final long serialVersionUID = 1L;
	private JMenuBar jMenuBar1;
	private Panel jPanel1;
	private JLabel jLabel20;
	private JMenuItem jMenuItem5;
	private JMenu jMenu6;
	private JMenu jMenu5;
	private JMenuItem jMenuItem6, jMenuItem7,jMenuItem8;

	private JMenu jMenu4;
	private JMenu jMenu3;
	private JLabel jLabel19;
	private JLabel jLabel18;
	private JLabel jLabel17;
	private JTextArea jTextArea1;
	private JMenuItem jMenuItem4;
	
	private JMenuItem jMenuItem3;
	private JMenu jMenu2;
	
	private JMenuItem jMenuItem2;
	private JMenuItem jMenuItem1;
	private JMenu jMenu1;
	private Juego j=new Juego();
	private MapeoDeImagenes m=new Original();
	private  Posicion[] pos={new Posicion(0,0),new Posicion(100,0),new Posicion(200,0),new Posicion(300,0),
	           new Posicion(0,112),new Posicion(100,112),new Posicion(200,112),new Posicion(300,112),
	           new Posicion(0,224),new Posicion(100,224),new Posicion(200,224),new Posicion(300,224),
	           new Posicion(0,336),new Posicion(100,336),new Posicion(200,336),new Posicion(300,336),};
	/**
	* Auto-generated main method to display this JFrame
	*/
	public Posicion[] obtenerPosiciones()
	{return pos;}
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				GuiJuego inst = new GuiJuego();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public GuiJuego() {
		super();
		 addKeyListener(this);
	        setFocusable(true);
		initGUI();
	}
	
	private void initGUI() {
		try {
			AnchorLayout thisLayout = new AnchorLayout();
			getContentPane().setLayout(thisLayout);
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setBackground(new java.awt.Color(128,64,64));
			{
				
			}
			{
				jLabel20 = new JLabel();
				getContentPane().add(jLabel20, new AnchorConstraint(27, 486, 72, 11, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				jLabel20.setText("Coleccionables :");
				jLabel20.setPreferredSize(new java.awt.Dimension(397, 24));
				jLabel20.setBackground(new java.awt.Color(128,0,255));
				jLabel20.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
			    jLabel20.setVisible(false);
			    jLabel20.setForeground(new java.awt.Color(255,255,255));
			}
			{
				jLabel19 = new JLabel();
				getContentPane().add(jLabel19, new AnchorConstraint(25, 872, 72, 757, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				jLabel19.setText("Balas : ");
				jLabel19.setPreferredSize(new java.awt.Dimension(96, 25));
				jLabel19.setForeground(new java.awt.Color(255,255,255));
				jLabel19.setBackground(new java.awt.Color(128,0,255));
				jLabel19.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
				jLabel19.setVisible(false);
			}
			{
				jLabel18 = new JLabel();
				getContentPane().add(jLabel18, new AnchorConstraint(25, 744, 72, 629, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				jLabel18.setText("Nafta : ");
				jLabel18.setPreferredSize(new java.awt.Dimension(96, 25));
				jLabel18.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
				jLabel18.setBackground(new java.awt.Color(128,0,255));
				jLabel18.setForeground(new java.awt.Color(255,255,255));
				jLabel18.setVisible(false);
			}
			{
				jLabel17 = new JLabel("Puntaje : ");
				getContentPane().add(jLabel17, new AnchorConstraint(25, 614, 72, 499, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				jLabel17.setPreferredSize(new java.awt.Dimension(96, 25));
				jLabel17.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
				jLabel17.setBackground(new java.awt.Color(128,0,255));
				jLabel17.setForeground(new java.awt.Color(255,255,255));
				jLabel17.setVisible(false);
			}
			{
				jTextArea1 = new JTextArea();
				getContentPane().add(jTextArea1, new AnchorConstraint(100, 455, 959, 36, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				jTextArea1.setPreferredSize(new java.awt.Dimension(350, 457));
				jTextArea1.setBackground(new java.awt.Color(0,0,0));
				jTextArea1.setForeground(new java.awt.Color(255,255,255));
				jTextArea1.setVisible(false);
				
			}
			{
				jPanel1 = new Panel();
				
				
				getContentPane().add(jPanel1, new AnchorConstraint(51, 26, 921, 500, AnchorConstraint.ANCHOR_ABS, AnchorConstraint.ANCHOR_ABS, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));

			}
			{
				jMenuBar1 = new JMenuBar();
				setJMenuBar(jMenuBar1);
				jMenuBar1.setBackground(new java.awt.Color(255,128,64));
				{
					jMenu1 = new JMenu();
					jMenuBar1.add(jMenu1);
					jMenu1.setText("seleccionarRobot");
					jMenu1.setBackground(new java.awt.Color(255,128,64));
					{
						jMenuItem1 = new JMenuItem();
						jMenu1.add(jMenuItem1);
						jMenuItem1.setText("Civil");
						jMenuItem1.setBackground(new java.awt.Color(255,128,64));
						jMenuItem1.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
								
								jTextArea1.setVisible(false);
								jLabel17.setVisible(true);
								jLabel18.setVisible(true);
								jLabel19.setVisible(false);
								jLabel20.setVisible(true);
								j.seleccionarRobot("Civil",new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/Robot Derecha.gif")),pos[12]);
								jLabel18.setText("Nafta : "+j.obtenerRobot().obtenerNafta());
							   
							}
						});
					}
				}
			}
					{
						jMenuItem2 = new JMenuItem();
						jMenu1.add(jMenuItem2);
						jMenuItem2.setText("Militar");
						jMenuItem2.setBackground(new java.awt.Color(255,128,64));
						/**jMenuItem2.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
									jTextArea1.setVisible(false);
								jLabel17.setVisible(true);
								jLabel18.setVisible(true);
								jLabel19.setVisible(true);
								jLabel20.setVisible(true);
								j.seleccionarRobot("Militar",new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/Robot Derecha.gif")),pos[12]);
								jLabel18.setText("Nafta : "+j.obtenerRobot().obtenerNafta());
							    
							}
						});*/
					}
		
				
				{
					jMenu2 = new JMenu();
					jMenuBar1.add(jMenu2);
					jMenu2.setText("EditarNivel");
				}
					{
						jMenuItem3 = new JMenuItem();
						jMenu2.add(jMenuItem3);
						jMenuItem3.setText("ModoTexto");
						jMenuItem3.setBackground(new java.awt.Color(255,128,64));
						jMenuItem3.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
								jTextArea1.setVisible(true);
								
							 
							}
						});
					}
					{
						jMenuItem4 = new JMenuItem();
						jMenu2.add(jMenuItem4);
						jMenuItem4.setText("ModoGrafico");
						jMenuItem4.setBackground(new java.awt.Color(255,128,64));
						jMenuItem4.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
									jTextArea1.setVisible(false);
							}
						});
					
				}
				{
					jMenu3 = new JMenu();
					jMenuBar1.add(jMenu3);
					jMenu3.setText("CargarNivel");
					jMenu3.setBackground(new java.awt.Color(255,128,64));
					{
						jMenuItem5 = new JMenuItem();
						jMenu3.add(jMenuItem5);
						jMenuItem5.setText("Nivel 1");
						jMenuItem5.setBackground(new java.awt.Color(255,128,64));
						jMenuItem5.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
								
								generarNivel();
								
								
								
								
								
							}
						});
					}
				}
				
				{
					jMenu4 = new JMenu();
					jMenuBar1.add(jMenu4);
					jMenu4.setText("ReiniciarNivel");
					jMenu4.setBackground(new java.awt.Color(255,128,64));
				}
				
				{
					jMenuItem6 = new JMenuItem();
					jMenu4.add(jMenuItem6);
					jMenuItem6.setText("Reiniciar");
					jMenuItem6.setBackground(new java.awt.Color(255,128,64));
					jMenuItem6.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
						generarNivel();
						
						}
					});
				
			}
				{
					
					
				}
				
				{
					jMenu5 = new JMenu();
					jMenuBar1.add(jMenu5);
					jMenu5.setText("GuardarNivel");
					jMenu5.setBackground(new java.awt.Color(255,128,64));
					jMenu5.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							
							}
						});
					}
				{
					jMenuItem7 = new JMenuItem();
					jMenu5.add(jMenuItem7);
					jMenuItem7.setText("Guardar");
					jMenuItem7.setBackground(new java.awt.Color(255,128,64));
					jMenuItem7.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							try {
								FileOutputStream fs;
								
									fs = new FileOutputStream("nivel.txt");
								//Creamos el archivo
						         ObjectOutputStream os = new ObjectOutputStream(fs);//Esta clase tiene el método writeObject() que necesitamos
						         os.writeObject(jLabel17);
						         os.writeObject(jLabel18);
						         os.writeObject(jLabel19);
						         os.writeObject(jPanel1);//El método writeObject() serializa el objeto y lo escribe en el archivo
						         os.close();//Hay que cerrar siempre el archivo
								} catch (IOException e) {
								
								}
						}
					});
				
			}
				
				
				{
					jMenu6 = new JMenu();
					jMenuBar1.add(jMenu6);
					jMenu6.setText("RecuperarNivel");
					jMenu6.setBackground(new java.awt.Color(255,128,64));
					jMenu6.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							
							
						}});}
				{	jMenuItem8 = new JMenuItem();
				jMenu6.add(jMenuItem8);
				jMenuItem8.setText("Recuperar");
				jMenuItem8.setBackground(new java.awt.Color(255,128,64));
				jMenuItem8.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						
					}
				});
			
				}
				
				
			pack();
			this.setSize(852, 597);
		} catch (Exception e) {
		   
			e.printStackTrace();
		}
	}

	@Override
	public void keyPressed(KeyEvent e) {
		int key = e.getKeyCode();
	
		InfoJugador Info=new InfoJugador();
		
		if(key==KeyEvent.VK_UP)	
	
		{
			if(j.obtenerRobot().obtenerNafta()>=1||j.obtenerRobot().obtenerNafta()>=2){
				
				Info=j.avanzar(pos);

				if(Info!=null)
	
				{
					int[]puntos=Info.getPuntos();

		
					jLabel17.setText("Puntaje :"+puntos[0]);
		
					
					jLabel18.setText("Nafta :"+puntos[1]);
				
	
					jPanel1.mover(Info);
	

					j.obtenerRobot().setPosicion(Info.getOrientacion().getPosicionNueva());
				
		
				
				}
			}
			else
			{
				j.obtenerRobot().DecrementarNafta(j.obtenerRobot().obtenerNafta());
				jLabel18.setText("Nafta :"+j.obtenerRobot().obtenerNafta());
			}
	
	
		}
	
		else
	
	
			if (key==KeyEvent.VK_LEFT)
	
			{
				
				
					
				if(j.obtenerRobot().obtenerNafta()>=2||j.obtenerRobot().obtenerNafta()>=4){
						
					Orientacion info=j.girarRobot("izq", pos);
			
		
					jPanel1.girar(info.getOrientacion(),info.getPosicionVieja());
	
					jLabel17.setText("Puntaje :"+j.obtenerRobot().obtenerPuntaje());
		
					jLabel18.setText("Nafta :"+j.obtenerRobot().obtenerNafta());
				}
				else
				{
					j.obtenerRobot().DecrementarNafta(j.obtenerRobot().obtenerNafta());
					jLabel18.setText("Nafta :"+j.obtenerRobot().obtenerNafta());
				}
		
				
				
		
	
			}

			else 
				if(key==KeyEvent.VK_RIGHT)
	     
				{
		           
					
						
					if(j.obtenerRobot().obtenerNafta()>=2||j.obtenerRobot().obtenerNafta()>=4){
							
						Orientacion info=j.girarRobot("der", pos);  						
		
						jPanel1.girar(info.getOrientacion(),info.getPosicionVieja());
	
						jLabel17.setText("Puntaje :"+j.obtenerRobot().obtenerPuntaje());
		
						jLabel18.setText("Nafta :"+j.obtenerRobot().obtenerNafta());
		
					}
					else
					{
						j.obtenerRobot().DecrementarNafta(j.obtenerRobot().obtenerNafta());
						jLabel18.setText("Nafta :"+j.obtenerRobot().obtenerNafta());
					}
					
		          
				}
		
	
	
	
	}
	@Override
	public void keyReleased(KeyEvent e) {
	
		int key = e.getKeyCode();
		
			if(key==KeyEvent.VK_UP ||key==KeyEvent.VK_LEFT ||key==KeyEvent.VK_RIGHT )	
		
			{
				if(j.obtenerRobot().getPosicion().getColumna()==j.obtenerMapeo().getPosFinal().getColumna()&&j.obtenerRobot().getPosicion().getFila()==j.obtenerMapeo().getPosFinal().getFila())
		
				{
			
					{
						JOptionPane.showMessageDialog(null,"Ganaste!.Ha empezar otra vez!");
			
						generarNivel();
						
					}
		
					
		       }
				else if(j.obtenerRobot().obtenerNafta()<=0)
			      {
					JOptionPane.showMessageDialog(null,"Perdiste!.Intentalo otra vez!");
					
					generarNivel();
					
				      }
				
			}
			
		

	}

	@Override
	public void keyTyped(KeyEvent e) {
		
		int key = e.getKeyCode();
		
		if(key==KeyEvent.VK_UP ||key==KeyEvent.VK_LEFT ||key==KeyEvent.VK_RIGHT )
		{
			if(j.obtenerRobot().obtenerNafta()<=0)
		      {
			JOptionPane.showMessageDialog(null,"Perdiste!.Intentalo otra vez!");
			
			generarNivel();
			
		      }
		}
	}
/**
 * Crea el nivel para la logica del juego y crea el panel el la interfaz.Se utiliza cuando 
 * inicia el nivel en cargar nivel y cuando tiene que reiniciarlo.
 * 
 * */	
private void generarNivel()

{
	Map<Posicion,Piso> piso=new HashMap<Posicion,Piso>();

	Map<Posicion,Coleccionable> coleccionable=new HashMap<Posicion,Coleccionable>();

	Map<Posicion,Objeto> objeto=new HashMap<Posicion,Objeto>();

	Map<Posicion,Premio> premio=new HashMap<Posicion,Premio>();

	coleccionable.put(pos[10],new Coleccionable(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/cono.gif"))));

	coleccionable.put(pos[11],new Coleccionable(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/Baliza.gif"))));

	premio.put(pos[7],new Puntos(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/puntaje.gif"))));

	premio.put(pos[4],new Nafta(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/nafta.gif"))));

	piso.put(pos[1], new Arena(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/arena.gif"))));

	piso.put(pos[3], new Arena(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/arena.gif"))));

	piso.put(pos[5], new Arena(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/arena.gif"))));

	piso.put(pos[7], new Arena(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/arena.gif"))));

	piso.put(pos[11], new Arena(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/arena.gif"))));

	piso.put(pos[13], new Arena(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/arena.gif"))));

	piso.put(pos[2], new Asfalto(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/asfalto.gif"))));

	piso.put(pos[4], new Asfalto(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/asfalto.gif"))));

	piso.put(pos[6], new Asfalto(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/asfalto.gif"))));

	piso.put(pos[8], new Asfalto(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/asfalto.gif"))));

	piso.put(pos[10], new Asfalto(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/asfalto.gif"))));

	piso.put(pos[12], new Asfalto(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/asfalto.gif"))));

	piso.put(pos[14], new Asfalto(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/asfalto.gif"))));

	piso.put(pos[0],new NoTransitable(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/fuego.gif"))));

	piso.put(pos[9],new NoTransitable(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/agua.gif"))));

	piso.put(pos[15],new NoTransitable(new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/agua.gif"))));


	Mapeo m3=new Mapeo();

	m3.setMapeoColeccionables(coleccionable);
	

	m3.setMapeoObjetos(objeto);

	m3.setMapeoPisos(piso);

	m3.setMapeoPremios(premio);

	m3.setPosRobot(pos[12]);

	m3.setPosInicial(pos[12]);

	m3.setPosFinal(pos[3]);
  
	j.seleccionarRobot("Civil",new ImageIcon(getClass().getClassLoader().getResource("Proyecto2/Imagenes/Robot Derecha.gif")),pos[12]);
	
	jLabel17.setText("Puntaje :"+j.obtenerRobot().obtenerPuntaje());
		
	jLabel18.setText("Nafta :"+j.obtenerRobot().obtenerNafta());
		
	j.guardarMapeo(m3);
		
	jPanel1.Nivel1(m);

}

}
